package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FISDemo {
    public static void main(String[] args) throws IOException {
        /**
         * FileInputStream(String filename)
         * FileInputStream(File file)
         * 上述两种构造器创建文件输入流是，如果参数表达的是一个文件则可以正常实例化
         * 若表达的文件不存在或表达的是一个目录，则会直接抛出异常:FileNotFoundException
         */
        FileInputStream fis = new FileInputStream("./fos.dat");
        /*
        InputStream超类上定义读取一个字节的方法:(所有的字节输入流都具有该方法)
        int read()
        int read()
            读取1个字节，并以int形式返回。返回的int值对应的2进制中只有"低八位"是有效的(读取到的字节)
            高24为全部补0.
            如果该方法返回的int值为整数-1(32位2进制都是1)时，则表达流读取到了末尾。


            fos.dat文件数据
            00000001 00000010

            第一次调用:
            int d = fis.read();//读取1个字节

            读取文件数据:
            00000001 00000010
            ^^^^^^^^
            读取的字节

            变量d对应的2进制样子:00000000 00000000 00000000 00000001
                              |--------补充24个0--------| 读取的字节


            第二次调用:
            d = fis.read();//读取1个字节

            读取文件数据:
            00000001 00000010
                     ^^^^^^^^
                     读取的字节

            变量d对应的2进制样子:00000000 00000000 00000000 00000010
                              |--------补充24个0--------| 读取的字节


            第三次调用:
            d = fis.read();//读取1个字节

            读取文件数据:
            00000001 00000010 文件末尾
                              ^^^^^^^^
                              没有字节了

            变量d对应的2进制样子:11111111 11111111 11111111 11111111
                              |----------32位2进制全为1-----------|
         */

        int d = fis.read();
        System.out.println(d);//1


        d = fis.read();
        System.out.println(d);//2
        d = fis.read();
        System.out.println(d);//-1   文件末尾
    }
}
